package com.ruoyi.kucunpandian.service.impl;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.kucunpandian.mapper.KucunpandianMapper;
import com.ruoyi.kucunpandian.domain.Kucunpandian;
import com.ruoyi.kucunpandian.service.IKucunpandianService;
import com.ruoyi.common.core.text.Convert;

/**
 * 库存盘点Service业务层处理
 * 
 * @author ruoyi
 * @date 2023-01-10
 */
@Service
public class KucunpandianServiceImpl implements IKucunpandianService 
{
    @Autowired
    private KucunpandianMapper kucunpandianMapper;

    /**
     * 查询库存盘点
     * 
     * @param id 库存盘点主键
     * @return 库存盘点
     */
    @Override
    public Kucunpandian selectKucunpandianById(Long id)
    {
        return kucunpandianMapper.selectKucunpandianById(id);
    }

    /**
     * 查询库存盘点列表
     * 
     * @param kucunpandian 库存盘点
     * @return 库存盘点
     */
    @Override
    public List<Kucunpandian> selectKucunpandianList(Kucunpandian kucunpandian)
    {
        return kucunpandianMapper.selectKucunpandianList(kucunpandian);
    }

    /**
     * 查询仓库盘点列表
     * @return 仓库盘点集合
     */
    public List<Kucunpandian> select2CangkupandianList(){
        return kucunpandianMapper.select2CangkupandianList();
    }

    /**
     * 新增库存盘点
     * 
     * @param kucunpandian 库存盘点
     * @return 结果
     */
    @Override
    public int insertKucunpandian(Kucunpandian kucunpandian)
    {
        List<Kucunpandian> kucunpandianList = kucunpandianMapper.select2CangkupandianList();
        for (Kucunpandian ku:kucunpandianList
        ) {
            if (ku.getCangkuName().equals(kucunpandian.getCangkuName())
                    && ku.getGoodId().equals(kucunpandian.getGoodId())
                    && ku.getGoodName().equals(kucunpandian.getGoodName())) {
                Long newkucun = kucunpandian.getKuncun() + ku.getKuncun();
                ku.setKuncun(newkucun);
                return kucunpandianMapper.updateKucunpandian(ku);
            }
        }
        return kucunpandianMapper.insertKucunpandian(kucunpandian);
    }

    /**
     * 修改库存盘点
     * 
     * @param kucunpandian 库存盘点
     * @return 结果
     */
    @Override
    public int updateKucunpandian(Kucunpandian kucunpandian)
    {
        return kucunpandianMapper.updateKucunpandian(kucunpandian);
    }

    /**
     * 批量删除库存盘点
     * 
     * @param ids 需要删除的库存盘点主键
     * @return 结果
     */
    @Override
    public int deleteKucunpandianByIds(String ids)
    {
        return kucunpandianMapper.deleteKucunpandianByIds(Convert.toStrArray(ids));
    }

    /**
     * 删除库存盘点信息
     * 
     * @param id 库存盘点主键
     * @return 结果
     */
    @Override
    public int deleteKucunpandianById(Long id)
    {
        return kucunpandianMapper.deleteKucunpandianById(id);
    }

    @Override
    public Kucunpandian selectCangkupandianByGoodIdAndCangKuNameAndGoodName(String goodId, String gouhuoCangku,String goodName) {
        List<Kucunpandian> kucunpandianList = kucunpandianMapper.select2CangkupandianList();
        for (Kucunpandian k:kucunpandianList
        ) {
            if (k.getGoodId().equals(goodId) && k.getCangkuName().equals(gouhuoCangku) && k.getGoodName().equals(goodName)) {
                return k;
            }
        }
        return null;
    }

    @Override
    public List<String> selectCangkupandianProportion() {

        List<String> list = new ArrayList<>();
        List<HashMap<String,Object>> lists = kucunpandianMapper.selectCangkupandianProportion();

        if (lists.size()>0) {
            String cangkuuName = (String) lists.get(0).get("cangku_name");
            int a =1;

            for (int i = 0; i < lists.size(); i++) {
                String cangku_name = (String) lists.get(i).get("cangku_name");
                if (Objects.equals(cangkuuName, cangku_name) && a<=10) {
                    cangkuuName = cangku_name;
                    BigDecimal totalkucun = (BigDecimal) lists.get(i).get("totalkucun");
                    String good_name = (String) lists.get(i).get("good_name");
                    Integer kuncun = (Integer) lists.get(i).get("kuncun"); //
                    String result = cangku_name +"@"+totalkucun +"@"+good_name +"@"+kuncun;
                    list.add(result);
                    a++;
                }
                else if (a > 10) {
                    for (int j = i; j < lists.size(); j++) {
                        if (!Objects.equals(cangkuuName, lists.get(j).get("cangku_name").toString())) {
                            cangkuuName = (String) lists.get(j).get("cangku_name");
                            i=j;
                            a =1;
                            i-=1;
                            break;
                        }
                    }
                }else {
                    cangkuuName = cangku_name;
                    BigDecimal totalkucun = (BigDecimal) lists.get(i).get("totalkucun");
                    String good_name = (String) lists.get(i).get("good_name");
                    Integer kuncun = (Integer) lists.get(i).get("kuncun"); //
                    String result = cangku_name +"@"+totalkucun +"@"+good_name +"@"+kuncun;
                    list.add(result);
                }
            }
            return list;
        }
        return null;
    }

    @Override
    public List<Kucunpandian> selectAllKucunpandianList(String cangkuName) {
        return kucunpandianMapper.selectAllKucunpandianList(cangkuName);
    }
}
